home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / emacs / emacs1857 / bin_d2.zoo / lisp / getris.elc < prev    next >
Text File  |  1991-12-02  |  10KB  |  179 lines

  1.  
  2. (provide (quote getris))
  3.  
  4. (defvar getris-initial-delay 10 "\
  5. *delay count to control the speed of getris game.  bigger means slower.
  6. You should substitute this value according to your system's performance.")
  7.  
  8. (defvar getris-min-delay 2 "\
  9. *Minimum delay count to control the maximum speed of getris game.
  10. Smaller means faster.  The default value, 2, means `as fast as possible.'")
  11.  
  12. (defvar getris-acceleration 200 "\
  13. *Acceleration rate of getris game.
  14. Smaller value means quicker speed-up.  This value is performance independent.")
  15.  
  16. (defvar getris-high-score-file (or (getenv "GETRISFILE") "$HOME/.getris") "\
  17. *File name where top ten scores of getris are recorded.
  18. Initialized from GETRISFILE environment variable.
  19. Nil means does not record scores.")
  20.  
  21. (defvar getris-block-string (if (and (boundp (quote kanji-flag)) kanji-flag)
  22. "**" "**") "\ *String for getris block.  Must be width of two column.")
  23.  
  24. (defvar getris-width 10 "\
  25. *Width of getris board (number of blocks).  Each block occupies two
  26. column width on window.")
  27.  
  28. (defvar getris-use-full-window nil "\
  29. *Non-nil means that starting Getris game deletes other windows.")
  30.  
  31. (defun getris nil "\
  32. Clone of a famous Russian game program." (interactive) (byte-code "IJêא ë⓪êבג!êד êה ç" [getris-previous-window-configuration nil current-window-configuration switch-to-buffer "*Getris*" getris-mode getris-startup] 5))
  33.  
  34. (defvar getris-command-vector nil "\
  35. Vector of functions which maps character to getris command.")
  36.  
  37. (defvar getris-mode-map nil)
  38.  
  39. (defvar getris-piece-data nil "\
  40. Vector of piece data.
  41. Each element of this vector is vector of size four, which correspond
  42. to four directions of piece.  And each element of four size vectors is
  43. a list of form:
  44.     (max-y-offset (x1 . y1) (x2 . y2) (x3 . y3) (x4 . y4))
  45. where:
  46.     (x1 . y1) ... (x4 . y4) are offsets of dot from imaginary `origin'
  47.                 at upper-left side of the piece,
  48.     0 <= y[1-4] <= max-y-offset.")
  49.  
  50. (defvar getris-left-margin)
  51.  
  52. (defvar getris-height)
  53.  
  54. (defvar getris-previous-window-configuration nil)
  55.  
  56. (defvar getris-blank-line)
  57.  
  58. (defvar getris-complete-line)
  59.  
  60. (defvar getris-line-length)
  61.  
  62. (defun getris-startup nil (byte-code "IJë⓪êב êebêגד!cêהed\"êאë⓪ç" [buffer-read-only nil t erase-buffer substitute-command-keys "
  63.  
  64. <<< G E T R I S >>>
  65.  
  66. Clone of a famous Russian game program.
  67.  
  68. Originally written by
  69. MAEDA Atusi
  70. mad@nakanishi.math.keio.junet
  71.  
  72.  
  73. <Type \\[getris-mode-help] for help, \\[getris-start] to start game.>
  74. " center-region] 5))
  75.  
  76. (defun getris-mode-help nil (interactive) (byte-code "ijêIJאבג!בד!בה!בו!בז!%!ç" [nil message concat substitute-command-keys "\\[getris-mode-help]:Print this  " "\\[getris-start]:Start new game  " "\\[getris-help]:List action keys  " "\\[boss-has-come]:Boss has come!  " "\\[getris-exit]:Exit"] 12))
  77.  
  78. (or getris-mode-map (progn (setq getris-mode-map (make-sparse-keymap)) (define-key getris-mode-map "?" (quote getris-mode-help)) (define-key getris-mode-map "" (quote getris-start)) (define-key getris-mode-map "h" (quote getris-help)) (define-key getris-mode-map "" (quote boss-has-come)) (define-key getris-mode-map "q" (quote getris-exit))))
  79.  
  80. (defun getris-help nil (interactive) (byte-code "ijêIJא!ç" [nil message "j:Left  k:Rotate  l:Right  Space:Drop  ESC:Escape  q:Exit"] 2))
  81.  
  82. (or getris-command-vector (progn (setq getris-command-vector (make-vector 256 (quote getris-help))) (aset getris-command-vector 106 (quote getris-move-left)) (aset getris-command-vector 107 (quote getris-rotate)) (aset getris-command-vector 108 (quote getris-move-right)) (aset getris-command-vector 32 (quote getris-drop)) (aset getris-command-vector 113 (quote getris-quit)) (aset getris-command-vector 27 (quote getris-boss-has-come))))
  83.  
  84. (defun getris-mode nil "\
  85. Major mode for playing getris game.
  86. \\{getris-mode-map}
  87. Type \\[getris-help] for key action in the game.
  88. Entry to this mode calls the value of getris-mode-hook
  89. if that value is non-nil." (interactive) (byte-code "דêה êוז!êחë⓪êטë①êי
  90. !êכp!êגë③êל êמנ!ç" [major-mode mode-name getris-mode-map buffer-read-only t nil kill-all-local-variables make-local-variable global-mode-string getris-mode "Getris" use-local-map buffer-flush-undo getris-mode-help run-hooks getris-mode-hook] 7))
  91.  
  92. (defun getris-start nil (interactive) (byte-code "יêלמ!ê✓âנ é.ס ê    עWà\"פצקע    Z\"Tא\"ê♪רWà.פר♪Z!êס ê♪רWå;    עWàAשת!êן    Sך\" םןצק╱\"ך\"ףRë⑤êץ ם§✓╱\"םR!ë⑥◆êGë⑥    êיë⑥
  93. ê∧ ê∞  ♪Wàîcê Të⑥ êéx)ê ןαצק╱\"\\β\"Pc)êΓא!êπΣìç" [getris-use-full-window getris-left-margin t getris-height left-margin-space getris-blank-line getris-width getris-complete-line getris-block-string getris-line-length buffer-read-only nil i switch-to-buffer "*Getris*" delete-other-windows getris-get-window-size 5 enlarge-window * 2 20 error "Window size too small for getris." make-string 32 "||" "||
  94. " regexp-quote getris-repeat-string erase-buffer 0 4 61 random getris-quit-tag (byte-code "ij êIJ ç" [getris-main-loop getris-mode-help] 3)] 20))
  95.  
  96. (defun getris-get-window-size nil (byte-code "ב גZë⓪êדהו זג
  97. \"ח#ג\"ë①ç" [getris-height getris-left-margin getris-width window-height 2 / - window-width * 4] 8))
  98.  
  99. (defun getris-repeat-string (string times) (byte-code "ב⑧    גVà⑥
  100. ✓Pë⓪ê    Së①êé⇩ê✓)ç" [result times string "" 0] 3))
  101.  
  102. (defun getris-exit nil (interactive) (byte-code "IJêא✓!ç" [getris-previous-window-configuration nil set-window-configuration] 2))
  103.  
  104. (defun abs (number) (byte-code "✓IJWâ♪✓[é ✓ç" [number 0] 2))
  105.  
  106. (defun getris-main-loop nil (byte-code "    תתןך╱ם\"ף#ץ╱§\"∧∧∧∧∧ ♪
  107.     ✓◆ə⑧ ∞αβ ◆\"ם\"\\⑥    Γ⑥
  108. απβ !§\"⑥♪απβ !Σ\"⑥H⑥♪Hë⑥⓪êσ    ת⓪#àםσ    
  109. T⓪#à†µ    
  110. Të⑥
  111. ⓪#êτ①Φ    ץ♪②\"Z#ë⓪ê✓ë⑥✓ê✓Së⑥✓תVà«♪Të③êΘ à¬Ω③rH!êéÅêδ    
  112. ⓪#êébêµ    
  113. ⓪#êן
  114. ⓪@∮
  115. ⓪\"#ë②êϕ êé&ê∈ם!ê∩cêרë⑥④ê⑥à∈≡ .
  116. ç" [delay getris-initial-delay score loop-count center getris-left-margin getris-width disp delay-count x y direction kind piece-num piece-vector getris-piece-data piece-data getris-min-delay getris-acceleration getris-command-vector buffer-read-only t getris-high-score-file 0 + logior 1 -2 / 4 nil ash mod random -1 abs 7 getris-puttable-p getris-set-piece max 2 input-pending-p funcall getris-unset-piece getris-test-delete-line getris-show-score end-of-line "*** GAME OVER ***" getris-show-high-score] 28))
  117.  
  118. (defmacro getris-goto-x-y (x y) (byte-code "אבג✓דE    הFDç" [y x goto-char + * getris-line-length 1] 5))
  119.  
  120. (defmacro sit-for-getris (n) (byte-code "IJאב✓DEç" [n progn (goto-char (point-min)) sit-for] 4))
  121.  
  122. (defun getris-puttable-p (x y piece-data) (byte-code "IJ⑧
  123. Aë②à
  124. ✓à-וז♪
  125. @A\\ \"
  126. @@\\ח#bêgטU?à)הë⓪êé⇩ê✓)ç" [result t piece-data y getris-line-length x nil + * 1 32] 6))
  127.  
  128. (defun getris-set-piece (x y piece-data) (byte-code "✓Aë⓪à*דה    ✓@A\\
  129. \"♪✓@@\\ו#bêזח!ê cêebêטי!êéç" [piece-data y getris-line-length x getris-block-string + * 1 delete-char 2 sit-for 0] 6))
  130.  
  131. (defun getris-unset-piece (x y piece-data) (byte-code "✓Aë⓪à#גד    ✓@A\\
  132. \"♪✓@@\\ה#bêוז!êחcêéç" [piece-data y getris-line-length x + * 1 delete-char 2 "  "] 6))
  133.  
  134. (defun getris-test-delete-line (y piece-data) (byte-code "    
  135. @\\ו⑧    ✓XàUזח     \"וט#bêי!àL♪Të③êכ êל`מט!ê`\"ê╱cêנט!êל`סט!ê`\"êebê╱cêebêנו!ê    Të①êé◆êח♪♪♪#*ç" [max-y y piece-data lines-deleted getris-line-length getris-complete-line getris-blank-line 0 + * 1 looking-at ding delete-region next-line sit-for previous-line] 14))
  136.  
  137. (defun getris-show-score nil (byte-code "אב    \"ë⓪êèג q)êדה !êוז!ç" [global-mode-string score format "Score: %d" other-buffer set-buffer-modified-p buffer-modified-p sit-for 0] 6))
  138.  
  139. (defun getris-show-high-score nil (byte-code "ב    !⑧ג✓!êdbêדה
  140. ו ז ח %cêטיed#êכל!êמנ!êס`d\"êע✓!êebêפצ!)ç" [file getris-high-score-file score substitute-in-file-name find-file-other-window format "  %08d %20s at %s on %s
  141. " user-full-name current-time-string system-name sort-fields -1 goto-line 11 move-to-column 0 delete-region write-file pop-to-buffer "*Getris*"] 13))
  142.  
  143. (defun getris-move-left nil (byte-code "ב✓    
  144. #êגד✓הZ    
  145. #â⑨✓הZë⓪éə✓    
  146. #ç" [x y piece-data getris-unset-piece getris-set-piece getris-puttable-p 2] 6))
  147.  
  148. (defun getris-move-right nil (byte-code "ב✓    
  149. #êגד✓ה\\    
  150. #â⑨✓ה\\ë⓪éə✓    
  151. #ç" [x y piece-data getris-unset-piece getris-set-piece getris-puttable-p 2] 6))
  152.  
  153. (defun getris-rotate nil (byte-code "    הUâ
  154. וé     T⑧ז
  155. ♪ #êח
  156. ♪ט
  157. ♪✓H#â*✓ë①Hë④é+ #)ç" [new-direction direction x y